Język SQL. Przyjazny podręcznik, wydanie III
Larry Rockoff


Instrukcje SQL dla Microsoft SQL Server


--------------------------
JAK KORZYSTAĆ Z TEGO PLIKU
--------------------------

Znajdziesz tu wszystkie instrukcje SQL o składni dedykowanej dla Microsoft SQL Server, które zamieszczono w książce 
„Język SQL. Przyjazny podręcznik”. Instrukcje zostały wymienione zgodnie z kolejnością rozdziałów.

Przed ich wykorzystaniem należy najpierw utworzyć tabele z danymi, do których instrukcje te się odwołują.
Wskazówki dotyczące tej operacji znajdziesz w pliku "Skrypt instalacyjny Microsoft SQL Server".

Jeśli jakaś instrukcja nie została przeznaczona dla systemu Microsoft SQL Server, to została tu pominięta.
W rozdziałach 1 i 19 nie ma instrukcji SQL dla MS SQL.

Aby wykorzystać dowolną z instrukcji przedstawionych w tym pliku, skopiuj ją do SQL Management Studio i wykonaj.



------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 2
------------------------------


SELECT * FROM Klienci

SELECT *
FROM Klienci

SELECT
-- to jest pierwszy komentarz
ImięKlienta,
NazwiskoKlienta -- to jest drugi komentarz
FROM Klienci

SELECT
/* to jest pierwszy komentarz */
ImięKlienta,
NazwiskoKlienta /*to jest drugi komentarz
to jest dalsza część drugiego komentarza
tutaj znajduje się koniec drugiego komentarza */
FROM Klienci

SELECT NazwiskoKlienta
FROM Klienci

SELECT
ImięKlienta,
NazwiskoKlienta
FROM Klienci


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 3
------------------------------


SELECT
'Imię klienta:',
ImięKlienta
FROM Sprzedaż

SELECT
5,
ImięKlienta
FROM Sprzedaż

SELECT
IDSprzedaży,
ZakupionaIlość,
CenaZaSztukę,
ZakupionaIlość * CenaZaSztukę
FROM Sprzedaż

SELECT
IDSprzedaży,
ImięKlienta,
NazwiskoKlienta,
ImięKlienta + ' ' + NazwiskoKlienta
FROM Sprzedaż

SELECT
IDSprzedaży,
ImięKlienta,
NazwiskoKlienta,
ImięKlienta + ' ' + NazwiskoKlienta AS 'Nazwa'
FROM Sprzedaż

SELECT
IDSprzedaży,
ImięKlienta,
NazwiskoKlienta,
ImięKlienta + ' ' + NazwiskoKlienta Nazwa
FROM Sprzedaż

SELECT
*,
ImięKlienta + ' ' + NazwiskoKlienta AS 'Nazwa'
FROM Sprzedaż


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 4
------------------------------


SELECT
LEFT('jasnoniebieski',5) AS Wynik

SELECT
RIGHT('jasnoniebieski',9) AS Wynik

SELECT
SUBSTRING('łowcami', 2, 4) AS Wynik

SELECT
LTRIM('          dwa jabłka') AS Wynik

SELECT 
UPPER ('Abraham Lincoln') AS 'Konwersja na wielkie litery',
LOWER ('ABRAHAM LINCOLN') AS 'Konwersja na małe litery'

SELECT GETDATE()

SELECT DATEPART(month, '12/6/2021')

SELECT DATEPART(day, '12/6/2021')

SELECT DATEPART(week, '12/6/2021')

SELECT DATEPART(weekday, '12/6/2021')

SELECT DATEADD(day, 2, '12/6/2021')

SELECT DATEADD(week, 1, '12/6/2021')

SELECT DATEADD(month, -1, '12/6/2021')

SELECT DATEADD(year, 1, '12/6/2021')

SELECT DATEDIFF(day, '2021-07-08', '2021-08-14')

SELECT DATEDIFF(week, '2021-07-08', '2021-08-14')

SELECT DATEDIFF(month, '2021-07-08', '2021-08-14')

SELECT DATEDIFF(year, '2021-07-08', '2021-08-14')

SELECT ROUND(712.863, 3)

SELECT ROUND(712.863, 2)

SELECT ROUND(712.863, 1)

SELECT ROUND(712.863, 0)

SELECT ROUND(712.863, -1)

SELECT ROUND(712.863, -2)

SELECT PI( )

SELECT ROUND(PI( ), 2)

SELECT POWER(5,2) AS 'Liczba 5 podniesiona do kwadratu'

SELECT POWER(25,.5) AS 'Pierwiastek kwadratowy z liczby 25'

SELECT 
'2022-02-23' AS 'Data Pierwotna',
CAST('2022-02-23' AS DATETIME) AS 'Data Przekonwertowana'

SELECT 
GETDATE() AS 'Data bieżąca',
CAST(GETDATE() AS DATE) AS 'Tylko data'

SELECT
Produkt,
Kaloryczność
FROM Żywność

SELECT
Produkt,
ISNULL(CAST(Kaloryczność AS VARCHAR),'Nieznana') AS 'Kaloryczność'
FROM Żywność

SELECT
*,
NEWID() AS 'Wartość losowa'
FROM Żywność


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 5
------------------------------


SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY NazwiskoSprzedawcy

SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY ImięSprzedawcy

SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY ImięSprzedawcy ASC

SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY ImięSprzedawcy DESC

SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY NazwiskoSprzedawcy, ImięSprzedawcy

SELECT
NazwiskoSprzedawcy +', ' + ImięSprzedawcy AS Nazwa
FROM Sprzedawcy
ORDER BY Nazwa

SELECT
ImięSprzedawcy,
NazwiskoSprzedawcy
FROM Sprzedawcy
ORDER BY NazwiskoSprzedawcy + ImięSprzedawcy

SELECT DaneLiczbowe
FROM SortowanieDanych
ORDER BY DaneLiczbowe

SELECT
ISNULL(DaneLiczbowe, 0) AS 'DaneLiczbowe'
FROM SortowanieDanych
ORDER BY ISNULL(DaneLiczbowe, 0)

SELECT
DaneZnakowe
FROM SortowanieDanych
ORDER BY DaneZnakowe


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 6
------------------------------


SELECT
ImięKlienta,
NazwiskoKlienta,
ZakupionaIlość
FROM Sprzedaż
WHERE NazwiskoKlienta = 'Solecki'

SELECT
ImięKlienta,
NazwiskoKlienta,
ZakupionaIlość
FROM Sprzedaż
WHERE ZakupionaIlość = 5

SELECT
ImięKlienta,
NazwiskoKlienta,
ZakupionaIlość
FROM Sprzedaż
WHERE ZakupionaIlość > 6

SELECT
ImięKlienta,
NazwiskoKlienta
FROM Sprzedaż
WHERE NazwiskoKlienta > 'K'

SELECT
TOP 3
Tytuł AS 'Tytuł książki',
SprzedażWBieżącymMiesiącu AS 'Sprzedana ilość'
FROM Książki
ORDER BY SprzedażWBieżącymMiesiącu DESC

SELECT
TOP 1
Tytuł AS 'Tytuł książki',
SprzedażWBieżącymMiesiącu AS 'Sprzedana ilość'
FROM Książki
WHERE Autor = 'Szekspir'
ORDER BY SprzedażWBieżącymMiesiącu DESC

SELECT
TytułFilmu AS 'Film'
FROM Filmy
WHERE TytułFilmu LIKE '%MIŁOŚĆ%'

SELECT
TytułFilmu AS 'Film'
FROM Filmy
WHERE TytułFilmu LIKE 'MIŁOŚĆ%'

SELECT
TytułFilmu AS 'Film'
FROM Filmy
WHERE TytułFilmu LIKE '%MIŁOŚĆ'

SELECT
TytułFilmu AS 'Film'
FROM Filmy
WHERE TytułFilmu LIKE '% MIŁOŚĆ %'

SELECT
Imię,
Nazwisko
FROM Aktorzy
WHERE Imię LIKE '_ARY'

SELECT
Imię,
Nazwisko
FROM Aktorzy
WHERE Imię LIKE 'J_N'

SELECT
Imię,
Nazwisko
FROM Aktorzy
WHERE Imię LIKE '[CM]ARY'


SELECT
Imię,
Nazwisko
FROM Aktorzy
WHERE Imię LIKE '[^CM]ARY'


SELECT 
SOUNDEX ('Smith') AS 'Brzmienie Smith',
SOUNDEX ('Smythe') AS 'Brzmienie Smythe'

SELECT 
DIFFERENCE ('Smith', 'Smythe') AS 'Różnica'

SELECT 
Imię,
Nazwisko
FROM Aktorzy
WHERE DIFFERENCE (FirstName, 'John') = 4

SELECT 
Imię,
Nazwisko,
DIFFERENCE (Imię, 'John') AS 'Wartość DIFFERENCE',
SOUNDEX (Imię) AS 'Wartość SOUNDEX'
FROM Aktorzy


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 7
------------------------------


SELECT
Klient,
ZakupionaIlość
FROM RejestrZamówień
WHERE ZakupionaIlość > 3
AND ZakupionaIlość < 7

SELECT
Klient,
ZakupionaIlość,
CenaZaSztukę
FROM RejestrZamówień
WHERE ZakupionaIlość > 8
OR CenaZaSztukę > 3

SELECT
Klient,
Województwo,
ZakupionaIlość
FROM RejestrZamówień
WHERE Województwo = 'pomorskie'
OR Województwo = 'mazowieckie'
AND ZakupionaIlość > 8 

SELECT
Klient,
Województwo,
ZakupionaIlość
FROM RejestrZamówień
WHERE (Województwo = 'pomorskie'
OR Województwo = 'mazowieckie')
AND ZakupionaIlość > 8

SELECT
Klient,
Województwo,
ZakupionaIlość
FROM RejestrZamówień
WHERE Województwo = 'wielkopolskie'
OR (Województwo = 'pomorskie'
AND (ZakupionaIlość >= 3
AND ZakupionaIlość <= 10))

SELECT
Klient,
Województwo,
ZakupionaIlość 
FROM RejestrZamówień
WHERE NOT Województwo = 'wielkopolskie'

SELECT
Klient,
Województwo,
ZakupionaIlość
FROM RejestrZamówień
WHERE Województwo <> 'wielkopolskie'

SELECT
Klient,
Województwo,
ZakupionaIlość 
FROM RejestrZamówień
WHERE NOT (Województwo = 'pomorskie'
OR Województwo = 'wielkopolskie')

SELECT
Klient,
Województwo,
ZakupionaIlość 
FROM RejestrZamówień
WHERE Województwo <> 'pomorskie'
AND Województwo <> 'wielkopolskie'

SELECT
Klient,
Województwo,
ZakupionaIlość 
FROM RejestrZamówień
WHERE NOT (Województwo = 'pomorskie'
AND ZakupionaIlość > 3)

SELECT
Klient,
Województwo,
ZakupionaIlość 
FROM RejestrZamówień
WHERE Województwo <> 'pomorskie'
OR ZakupionaIlość <= 3

SELECT
Klient,
ZakupionaIlość
FROM RejestrZamówień
WHERE ZakupionaIlość >= 5
AND ZakupionaIlość <= 20

SELECT
Klient,
ZakupionaIlość
FROM RejestrZamówień
WHERE ZakupionaIlość BETWEEN 5 AND 20

SELECT
Klient,
ZakupionaIlość
FROM RejestrZamówień
WHERE ZakupionaIlość NOT BETWEEN 5 AND 20

SELECT
Klient,
Województwo
FROM RejestrZamówień
WHERE Województwo = 'pomorskie'
OR Województwo = 'wielkopolskie'

SELECT
Klient,
Województwo
FROM RejestrZamówień
WHERE Województwo IN ('pomorskie', 'wielkopolskie')

SELECT
Klient,
Województwo
FROM RejestrZamówień
WHERE Województwo NOT IN ('pomorskie', 'wielkopolskie')

SELECT
Opis,
StanMagazynowy
FROM Produkty
WHERE StanMagazynowy = 0

SELECT
Opis,
StanMagazynowy
FROM Produkty
WHERE StanMagazynowy = 0
OR StanMagazynowy IS NULL

SELECT
Opis,
StanMagazynowy
FROM Produkty
WHERE ISNULL(StanMagazynowy, 0) = 0


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 8
------------------------------


SELECT
CASE KodKategorii
WHEN 'O' THEN 'Owoc'
WHEN 'W' THEN 'Warzywo'
ELSE 'Inne'
END AS 'Kategoria',
Opis
FROM ArtykułySpożywcze

SELECT
CASE
WHEN KodKategorii = 'O' THEN 'Owoc'
WHEN KodKategorii = 'W' THEN 'Warzywo'
ELSE 'Inne'
END AS 'Kategoria',
Opis
FROM ArtykułySpożywcze

SELECT
CASE
WHEN Owoc = 'X' THEN 'Owoc'
WHEN Warzywo = 'X' THEN 'Warzywo'
ELSE 'Inne'
END AS 'Kategoria',
Opis
FROM KategorieArtykułówSpożywczych

SELECT *
FROM AmerykaPółnocna
ORDER BY
Kraj,
CASE Kraj
WHEN 'USA' THEN Stan
WHEN 'Kanada' THEN Prowincja
ELSE Stan
END,
Miasto

SELECT *
FROM ListaKlientów
WHERE Dochód >
CASE
WHEN Płeć = 'M' AND Wiek >= 50 THEN 75000
WHEN Płeć = 'K' AND Wiek >= 35 THEN 60000
ELSE 50000
END


------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 9
------------------------------


SELECT
DISTINCT
Wykonawca
FROM TytułyUtworów
ORDER BY Wykonawca

SELECT
DISTINCT
Wykonawca,
Album
FROM TytułyUtworów
ORDER BY Wykonawca, Album

SELECT
SUM (Opłata) AS 'Sumaryczna opłata za siłownię'
FROM Opłaty
WHERE RodzajOpłaty = 'Siłownia'

SELECT
AVG (LiczbaPunktów) AS 'Średnia liczba punktów za sprawdzian'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'

SELECT
AVG (LiczbaPunktów) AS 'Średnia liczba punktów za sprawdzian',
MIN (LiczbaPunktów) AS 'Minimalna liczba punktów za sprawdzian',
MAX (LiczbaPunktów) AS 'Maksymalna liczba punktów za sprawdzian'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'

SELECT
COUNT (*) AS 'Liczba wierszy z ocenianą pracą domową'
FROM Punktacja
WHERE OcenianaPraca = 'Praca domowa'

SELECT
COUNT (LiczbaPunktów) AS 'Liczba wierszy z punktami za pracę domową'
FROM Punktacja
WHERE OcenianaPraca = 'Praca domowa'

SELECT
COUNT (DISTINCT RodzajOpłaty) AS 'Liczba rodzajów opłaty'
FROM Opłaty

SELECT
OcenianaPraca AS 'Oceniana praca',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
GROUP BY OcenianaPraca
ORDER BY OcenianaPraca

SELECT
OcenianaPraca AS 'Oceniana praca',
Uczeń AS 'Uczeń',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
GROUP BY OcenianaPraca, Uczeń
ORDER BY OcenianaPraca, Uczeń

SELECT
OcenianaPraca AS 'Oceniana praca',
Uczeń AS 'Uczeń',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
GROUP BY OcenianaPraca, Uczeń
ORDER BY Uczeń, OcenianaPraca

SELECT
Uczeń AS 'Uczeń',
OcenianaPraca AS 'Oceniana praca',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
GROUP BY OcenianaPraca, Uczeń
ORDER BY Uczeń, OcenianaPraca

SELECT
Uczeń AS 'Uczeń',
OcenianaPraca AS 'Oceniana praca',
LiczbaPunktów AS 'Liczba punktów'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'
AND LiczbaPunktów >= 70
ORDER BY Uczeń, LiczbaPunktów

SELECT
Uczeń AS 'Uczeń',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów za sprawdzian'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'
GROUP BY Uczeń
HAVING AVG (LiczbaPunktów) >= 70
ORDER BY Uczeń

SELECT
Uczeń AS 'Uczeń',
OcenianaPraca AS 'Oceniana praca',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'
GROUP BY Uczeń, OcenianaPraca
HAVING AVG (LiczbaPunktów) >= 70
ORDER BY Uczeń

SELECT
CASE KodKategorii
WHEN 'O' THEN 'Owoc'
WHEN 'W' THEN 'Warzywo'
ELSE 'Inne'
END AS 'Kategoria',
COUNT(*) AS 'LiczbaProduktów'
FROM ArtykułySpożywcze
GROUP BY
CASE KodKategorii
WHEN 'O' THEN 'Owoc'
WHEN 'W' THEN 'Warzywo'
ELSE 'Inne'
END

SELECT
Uczeń AS 'Uczeń',
LiczbaLatNauki AS 'Liczba lat nauki',
OcenianaPraca AS 'Oceniana praca',
AVG (LiczbaPunktów) AS 'Średnia liczba punktów'
FROM Punktacja
WHERE OcenianaPraca = 'Sprawdzian'
GROUP BY Uczeń, LiczbaLatNauki, OcenianaPraca
HAVING AVG(LiczbaPunktów) >=
CASE
WHEN LiczbaLatNauki = 7 THEN 70
WHEN LiczbaLatNauki = 8 THEN 75
ELSE 80 END
ORDER BY Uczeń

SELECT
ROW_NUMBER() OVER (ORDER BY StosunekCenyDoZysku) AS 'Numer wiersza',
Skrót AS 'Symbol',
NazwaFirmy AS 'Nazwa',
NazwaGiełdy AS 'Giełda',
StosunekCenyDoZysku AS 'Stosunek ceny do zysku'
FROM Akcje
ORDER BY StosunekCenyDoZysku

SELECT
ROW_NUMBER() OVER (ORDER BY StosunekCenyDoZysku) AS 'Numer wiersza',
RANK() OVER (ORDER BY StosunekCenyDoZysku) AS 'Wynik funkcji rank',
DENSE_RANK() OVER (ORDER BY StosunekCenyDoZysku) AS 'Wynik funkcji dense_rank',
Skrót AS 'Symbol',
StosunekCenyDoZysku AS 'Stosunek ceny do zysku'
FROM Akcje
ORDER BY StosunekCenyDoZysku

SELECT
NTILE(4) OVER (ORDER BY StosunekCenyDoZysku) AS 'Kwartyl',
NTILE(10) OVER (ORDER BY StosunekCenyDoZysku) AS 'Decyl',
Skrót AS 'Symbol',
StosunekCenyDoZysku AS 'Stosunek ceny do zysku'
FROM Akcje
ORDER BY StosunekCenyDoZysku

SELECT
NazwaGiełdy AS 'Giełda',
ROW_NUMBER() OVER (PARTITION BY NazwaGiełdy ORDER BY StosunekCenyDoZysku) 
AS 'Numer wiersza w ramach danej giełdy',
Skrót AS 'Symbol',
StosunekCenyDoZysku AS 'Stosunek ceny do zysku'
FROM Akcje
ORDER BY NazwaGiełdy, StosunekCenyDoZysku

SELECT
NazwaGiełdy AS 'Giełda',
NTILE(4) OVER (PARTITION BY NazwaGiełdy ORDER BY StosunekCenyDoZysku) 
AS 'Numer kwartyla',
Skrót AS 'Symbol',
StosunekCenyDoZysku AS 'Stosunek ceny do zysku'
FROM Akcje
ORDER BY NazwaGiełdy, StosunekCenyDoZysku

SELECT
NazwaGiełdy,
Skrót as 'Symbol',
StosunekCenyDoZysku AS 'PE Ratio',
ROUND(PERCENT_RANK() OVER (PARTITION BY NazwaGiełdy
ORDER BY StosunekCenyDoZysku) * 100, 0) AS 'Ranking procentowy'
FROM Akcje
ORDER BY NazwaGiełdy, StosunekCenyDoZysku

SELECT 
TOP 1
PERCENTILE_CONT(0.5)
WITHIN GROUP
(ORDER BY StosunekCenyDoZysku)
OVER (PARTITION BY 'X') AS 'Mediana'
FROM Akcje

SELECT 
Giełda,
PERCENTILE_CONT(0.5)
WITHIN GROUP
(ORDER BY StosunekCenyDoZysku)
OVER (PARTITION BY Giełda) AS 'Mediana'
FROM Akcje

SELECT
IDKlienta
DataSprzedaży AS 'Data sprzedaży',
WartośćSprzedaży AS 'Wartość sprzedaży'
LAG(WartośćSprzedaży, 1)
OVER (PARTITION BY IDKlienta ORDER BY DataSprzedaży) AS 'Poprzednia sprzedaż'
FROM HistoriaSprzedaży
ORDER BY IDKlienta, DataSprzedaży


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 10
-------------------------------


SELECT
Kategoria,
Podkategoria,
SUM(LiczbaSztuk) AS 'Liczba sztuk'
FROM WykazProduktów
GROUP BY Kategoria, Podkategoria
ORDER BY Kategoria, Podkategoria

SELECT
Kategoria,
Podkategoria,
SUM(LiczbaSztuk) AS 'Liczba sztuk'
FROM WykazProduktów
GROUP BY ROLLUP(Kategoria, Podkategoria)

SELECT
Kategoria,
Podkategoria,
SUM(LiczbaSztuk) AS 'Liczba sztuk'
FROM WykazProduktów
GROUP BY ROLLUP(Kategoria, Podkategoria)
ORDER BY Kategoria, Podkategoria

SELECT
Kategoria,
Podkategoria,
SUM(LiczbaSztuk) AS 'Liczba sztuk',
GROUPING(Kategoria) AS 'Kategoria – wynik funkcji GROUPING',
GROUPING(Podkategoria) AS 'Podkategoria – wynik funkcji GROUPING'
FROM WykazProduktów
GROUP BY ROLLUP(Kategoria, Podkategoria)

SELECT
ISNULL(Kategoria,'') AS 'Kategoria',
ISNULL(Podkategoria, '') AS 'Podkategoria',
SUM(LiczbaSztuk) AS 'Liczba sztuk',
CASE WHEN GROUPING(Kategoria) = 1 then 'Suma łączna'
WHEN GROUPING(Podkategoria) = 1 then 'Suma częściowa'
ELSE ' ' END AS 'Suma częściowa/Suma łączna'
FROM WykazProduktów
GROUP BY ROLLUP(Kategoria, Podkategoria)

SELECT
CASE
WHEN GROUPING(Kategoria) = 1 THEN 'SUMA ŁĄCZNA'
WHEN GROUPING(Podkategoria) = 1 THEN 'SUMA CZĘŚCIOWA'
ELSE ISNULL(Kategoria,'') END AS 'Kategoria',
ISNULL(Podkategoria, '') AS 'Podkategoria',
SUM(LiczbaSztuk) AS 'Liczba sztuk'
FROM WykazProduktów
GROUP BY ROLLUP(Kategoria, Podkategoria)

SELECT
Województwo,
KanałSprzedaży AS 'Kanał sprzedaży',
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży'
FROM ZestawienieSprzedaży
GROUP BY Województwo, KanałSprzedaży
ORDER BY Województwo, KanałSprzedaży

SELECT
Województwo,
KanałSprzedaży AS 'Kanał sprzedaży',
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży'
FROM ZestawienieSprzedaży
GROUP BY CUBE(Województwo, KanałSprzedaży)
ORDER BY Województwo, KanałSprzedaży

SELECT
Województwo,
KanałSprzedaży AS 'Kanał sprzedaży',
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży',
GROUPING(Województwo) AS 'Województwo – wynik funkcji GROUPING',
GROUPING(KanałSprzedaży) AS 'Kanał sprzedaży – wynik funkcji GROUPING'
FROM ZestawienieSprzedaży
GROUP BY CUBE(Województwo, KanałSprzedaży)
ORDER BY Województwo, KanałSprzedaży

SELECT
ISNULL(Województwo,' ') AS 'Województwo',
ISNULL(KanałSprzedaży, ' ') AS 'Kanał sprzedaży',
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży',
CASE WHEN GROUPING(Województwo) = 1
AND GROUPING(KanałSprzedaży) = 1 THEN 'Suma łączna'
WHEN GROUPING(Województwo) = 1
AND GROUPING(KanałSprzedaży) = 0 THEN 'Kanał sprzedaży – suma częściowa'
WHEN GROUPING(Województwo) = 0
AND GROUPING(KanałSprzedaży) = 1 THEN 'Województwo – suma częściowa'
ELSE ' ' END AS 'Suma częściowa/Suma łączna'
FROM ZestawienieSprzedaży
GROUP BY CUBE(Województwo, KanałSprzedaży)
ORDER BY
CASE
WHEN GROUPING(Województwo) = 0 AND GROUPING(KanałSprzedaży) = 0 THEN 1
WHEN GROUPING(Województwo) = 0 AND GROUPING(KanałSprzedaży) = 1 THEN 2
WHEN GROUPING(Województwo) = 1 AND GROUPING(KanałSprzedaży) = 0 THEN 3
ELSE 4
END

SELECT
Województwo,
KanałSprzedaży,
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży'
FROM ZestawienieSprzedaży
GROUP BY Województwo, KanałSprzedaży
ORDER BY Województwo, KanałSprzedaży

SELECT * FROM
(SELECT KanałSprzedaży, Województwo, KwotaSprzedaży FROM ZestawienieSprzedaży) AS GłównaInstrukcja
PIVOT (SUM(KwotaSprzedaży) FOR Województwo IN ([MAZ], [PDL])) AS TabelaPrzestawna

SELECT
DataSprzedaży,
Województwo,
KanałSprzedaży,
SUM(KwotaSprzedaży) AS 'Kwota sprzedaży'
FROM ZestawienieSprzedaży
GROUP BY DataSprzedaży, Województwo, KanałSprzedaży
ORDER BY DataSprzedaży, Województwo, KanałSprzedaży

SELECT * FROM
(SELECT DataSprzedaży, KanałSprzedaży, Województwo, KwotaSprzedaży FROM ZestawienieSprzedaży) 
AS GłównaInstrukcja
PIVOT (SUM(KwotaSprzedaży) FOR Województwo IN ([MAZ], [PDL])) AS TabelaPrzestawna
ORDER BY DataSprzedaży

SELECT * FROM
(SELECT KanałSprzedaży, DataSprzedaży, Województwo, KwotaSprzedaży FROM ZestawienieSprzedaży) AS GłównaInstrukcja
PIVOT (SUM(KwotaSprzedaży) FOR Województwo IN ([MAZ], [PDL])) AS TabelaPrzestawna
ORDER BY KanałSprzedaży

SELECT * FROM
(SELECT DataSprzedaży, Województwo, KanałSprzedaży, KwotaSprzedaży FROM ZestawienieSprzedaży) AS GłównaInstrukcja
PIVOT (SUM(KwotaSprzedaży) FOR KanałSprzedaży IN ([Internet], [PunktSprzedażyDetalicznej])) AS TabelaPrzestawna
ORDER BY DataSprzedaży


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 11
-------------------------------


SELECT *
FROM Klienci
INNER JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta

SELECT *
FROM Zamówienia
INNER JOIN Klienci
ON Zamówienia.IDKlienta = Klienci.IDKlienta

SELECT *
FROM Klienci, Zamówienia
WHERE Klienci.IDKlienta = Zamówienia.IDKlienta

SELECT
K.IDKlienta AS 'ID klienta',
K.ImięKlienta AS 'Imię klienta',
K.NazwiskoKlienta AS 'Nazwisko klienta',
Z.IDZamówienia AS 'ID zamówienia',
Z.DataZamówienia AS 'Data',
Z.KwotaZamówienia AS 'Kwota'
FROM Klienci AS K
INNER JOIN Zamówienia AS Z
ON K.IDKlienta = Z.IDKlienta


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 12
-------------------------------


SELECT
Klienci.ImięKlienta AS 'Imię klienta',
Klienci.NazwiskoKlienta AS 'Nazwisko klienta',
Zamówienia.DataZamówienia AS 'Data zamówienia',
Zamówienia.KwotaZamówienia AS 'Kwota zamówienia',
Zwroty.DataZwrotu AS 'Data zwrotu',
Zwroty.KwotaZwrotu AS 'Kwota zwrotu'
FROM Klienci
LEFT JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta
LEFT JOIN Zwroty
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia
ORDER BY Klienci.NazwiskoKlienta, Klienci.ImięKlienta, Zamówienia.DataZamówienia

SELECT
Klienci.ImięKlienta AS 'Imię klienta',
Klienci.NazwiskoKlienta AS 'Nazwisko klienta',
Zamówienia.DataZamówienia AS 'Data zamówienia',
Zamówienia.KwotaZamówienia AS 'Kwota zamówienia'
FROM Klienci
LEFT JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta
LEFT JOIN Zwroty
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia
WHERE Zamówienia.IDZamówienia IS NOT NULL
AND Zwroty.IDZwrotu IS NULL
ORDER BY Klienci.NazwiskoKlienta, Klienci.ImięKlienta, Zamówienia.DataZamówienia

SELECT
OpisKlasyfikacji AS 'Opis klasyfikacji filmu',
TytułFilmu AS 'Tytuł filmu'
FROM Filmy
FULL JOIN KlasyfikacjaFilmów
ON Filmy.Klasyfikacja = KlasyfikacjaFilmów.Klasyfikacja
ORDER BY OpisKlasyfikacji, TytułFilmu

SELECT
Rozmiar,
Kolor
FROM RozmiaryKoszulek
CROSS JOIN KoloryKoszulek
ORDER BY Rozmiar, Kolor

SELECT
Rozmiar,
Kolor
FROM RozmiaryKoszulek, KoloryKoszulek
ORDER BY Rozmiar, Kolor

SELECT
IDZamówienia AS 'ID zamówienia',
DataZamówienia AS 'Data zamówienia',
KwotaZamówienia AS 'Kwota zamówienia'
FROM Zamówienia
CROSS JOIN KluczoweDaty
WHERE DataZamówienia = OstatniaDataPrzetwarzania


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 13
-------------------------------


SELECT
Pracownicy.Pracownik AS 'Imię i nazwisko pracownika',
Przełożeni.Pracownik AS 'Imię i nazwisko przełożonego'
FROM Kadry AS Pracownicy
INNER JOIN Kadry AS Przełożeni
ON Pracownicy.IDPrzełożonego = Przełożeni.IDPracownika
ORDER BY Pracownicy.Pracownik

SELECT
Pracownicy.Pracownik AS 'Imię i nazwisko pracownika',
Przełożeni.Pracownik AS 'Imię i nazwisko przełożonego'
FROM Kadry AS Pracownicy
LEFT JOIN Kadry AS Przełożeni
ON Pracownicy.IDPrzełożonego = Przełożeni.IDPracownika
ORDER BY Pracownicy.Pracownik

SELECT
Klienci.ImięKlienta AS 'Imię klienta',
Klienci.NazwiskoKlienta AS 'Nazwisko klienta',
Zamówienia.DataZamówienia AS 'Data zamówienia',
Zamówienia.KwotaZamówienia AS 'Kwota zamówienia',
Zwroty.DataZwrotu AS 'Data zwrotu',
Zwroty.KwotaZwrotu AS 'Kwota zwrotu'
FROM Klienci
LEFT JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta
LEFT JOIN Zwroty
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia
ORDER BY Klienci.NazwiskoKlienta, Klienci.ImięKlienta, Zamówienia.DataZamówienia

CREATE VIEW KlienciZamówieniaZwroty AS
SELECT
Klienci.ImięKlienta AS 'Imię klienta',
Klienci.NazwiskoKlienta AS 'Nazwisko klienta',
Zamówienia.DataZamówienia AS 'Data zamówienia',
Zamówienia.KwotaZamówienia AS 'Kwota zamówienia',
Zwroty.DataZwrotu AS 'Data zwrotu',
Zwroty.KwotaZwrotu AS 'Kwota zwrotu'
FROM Klienci
LEFT JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta
LEFT JOIN Zwroty
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia

SELECT *
FROM KlienciZamówieniaZwroty

SELECT *
FROM KlienciZamówieniaZwroty
ORDER BY [Nazwisko klienta], [Imię klienta], [Data zamówienia]

SELECT
[Imię klienta],
[Nazwisko klienta],
[Data zamówienia]
FROM KlienciZamówieniaZwroty
WHERE [Nazwisko klienta] = 'Wieczorek'

CREATE VIEW WidokKlientów AS
SELECT
ImięKlienta AS 'Imię klienta',
NazwiskoKlienta AS 'Nazwisko klienta'
FROM Klienci

ALTER VIEW WidokKlientów AS
SELECT
ImięKlienta AS 'Imię klienta',
NazwiskoKlienta AS 'Nazwisko klienta',
IDKlienta AS 'ID klienta'
FROM Klienci

DROP VIEW WidokKlientów

DROP VIEW KlienciZamówieniaZwroty


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 14
-------------------------------


SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
ISNULL(TransakcjeGotówka.SumaGotówka, 0) AS 'Łączna kwota zapłacona gotówką'
FROM Użytkownicy
LEFT JOIN
(SELECT
IDUżytkownika,
SUM(KwotaTransakcji) as 'SumaGotówka'
FROM Transakcje
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY IDUżytkownika) AS TransakcjeGotówka
ON Użytkownicy.IDUżytkownika = TransakcjeGotówka.IDUżytkownika
ORDER BY Użytkownicy.IDUżytkownika

SELECT
IDUżytkownika,
SUM(KwotaTransakcji) as 'SumaGotówka'
FROM Transakcje
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY IDUżytkownika

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
SUM(KwotaTransakcji) as 'SumaGotówka'
FROM Użytkownicy
LEFT JOIN Transakcje 
ON Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY Użytkownicy.IDUżytkownika, Użytkownicy.NazwaUżytkownika 
ORDER BY Użytkownicy.IDUżytkownika 

SELECT NazwaUżytkownika AS 'Nazwa użytkownika'
FROM Użytkownicy
WHERE IDUżytkownika IN
(SELECT IDUżytkownika
FROM Transakcje
WHERE SposóbZapłaty = 'Gotówka')

SELECT NazwaUżytkownika AS 'Nazwa użytkownika'
FROM Użytkownicy
INNER JOIN Transakcje
ON Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY Użytkownicy.NazwaUżytkownika

SELECT
NazwaUżytkownika as 'Nazwa użytkownika'
FROM Użytkownicy
WHERE
(SELECT
SUM (KwotaTransakcji) 
FROM Transakcje
WHERE Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika)
< 20

SELECT
NazwaUżytkownika as 'Nazwa użytkownika'
FROM Użytkownicy
LEFT JOIN Transakcje
ON Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika
GROUP BY Użytkownicy.IDUżytkownika, Użytkownicy.NazwaUżytkownika
HAVING SUM (KwotaTransakcji) < 20

SELECT
A.DataTransakcji,
A.KwotaTransakcji,
(SELECT
SUM (B.KwotaTransakcji) / COUNT(B.KwotaTransakcji)
FROM Transakcje AS B
WHERE DATEDIFF(day, A.DataTransakcji, B.DataTransakcji) BETWEEN -1 AND 1)
AS 'Średnia ruchoma'
FROM Transakcje AS A
ORDER BY A.DataTransakcji

SELECT
NazwaUżytkownika as 'Nazwa użytkownika'
FROM Użytkownicy
WHERE EXISTS
(SELECT *
FROM Transakcje
WHERE Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika)

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika'
FROM Użytkownicy
WHERE IDUżytkownika IN
(SELECT IDUżytkownika
FROM Transakcje)

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika'
FROM Użytkownicy
INNER JOIN Transakcje
ON Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika
GROUP BY NazwaUżytkownika

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
COUNT (IDTransakcji) AS 'Liczba transakcji'
FROM Użytkownicy
LEFT JOIN Transakcje
ON Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika 
GROUP BY Użytkownicy.IDUżytkownika, Użytkownicy.NazwaUżytkownika
ORDER BY Użytkownicy.IDUżytkownika 

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
(SELECT
COUNT (IDTransakcji)
FROM Transakcje
WHERE Użytkownicy.IDUżytkownika = Transakcje.IDUżytkownika)
AS 'Liczba transakcji'
FROM Użytkownicy
ORDER BY Użytkownicy.IDUżytkownika

SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
ISNULL(TransakcjeGotówka.SumaGotówka, 0) AS 'Łączna kwota zapłacona gotówką'
FROM Użytkownicy
LEFT JOIN
(SELECT
IDUżytkownika,
SUM(KwotaTransakcji) as 'SumaGotówka'
FROM Transakcje
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY IDUżytkownika) AS TransakcjeGotówka
ON Użytkownicy.IDUżytkownika = TransakcjeGotówka.IDUżytkownika
ORDER BY Użytkownicy.IDUżytkownika

WITH TransakcjeGotówka AS
(SELECT
IDUżytkownika,
SUM(KwotaTransakcji) as 'SumaGotówka'
FROM Transakcje
WHERE SposóbZapłaty = 'Gotówka'
GROUP BY IDUżytkownika) 
SELECT
NazwaUżytkownika AS 'Nazwa użytkownika',
ISNULL(TransakcjeGotówka.SumaGotówka, 0) AS 'Łączna kwota zapłacona gotówką'
FROM Użytkownicy
LEFT JOIN TransakcjeGotówka
ON Użytkownicy.IDUżytkownika = TransakcjeGotówka.IDUżytkownika
ORDER BY Użytkownicy.IDUżytkownika


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 15
-------------------------------


SELECT
IDKlienta,
DataZamówienia AS 'Data',
'Zamówienie' AS 'Rodzaj',
KwotaZamówienia AS 'Kwota'
FROM Zamówienia
WHERE IDKlienta = 2
UNION
SELECT
DataZwrotu AS 'Data',
'Zwrot' AS 'Rodzaj',
KwotaZwrotu AS 'Kwota'
FROM ZwrotyTowarów
WHERE IDKlienta = 2
ORDER BY Data

SELECT
DataZamówienia AS 'Data'
FROM Zamówienia
UNION
SELECT
DataZwrotu AS 'Data'
FROM ZwrotyTowarów
ORDER BY Data

SELECT
DataZamówienia AS 'Data'
FROM Zamówienia
UNION ALL
SELECT
DataZwrotu AS 'Data'
FROM ZwrotyTowarów
ORDER BY Data

SELECT
DataZamówienia AS 'Data'
FROM Zamówienia
INTERSECT
SELECT
DataZwrotu AS 'Data'
FROM ZwrotyTowarów
ORDER BY Data

SELECT
DataZamówienia AS 'Data'
FROM Zamówienia
EXCEPT 
SELECT
DataZwrotu AS 'Data'
FROM ZwrotyTowarów
ORDER BY Data


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 16
-------------------------------


CREATE PROCEDURE Procedura_1
AS
BEGIN
SELECT *
FROM Klienci
END

CREATE PROCEDURE ProceduraKlient
(@KlientID INT)
AS
BEGIN
SELECT *
FROM Klienci
WHERE IDKlienta = @KlientID
END

EXEC Procedura_1

EXEC ProceduraKlient
@KlientID =  2

ALTER PROCEDURE ProceduraKlient
(@KlientID INT)
AS
BEGIN
SELECT
IDKlienta,
NazwiskoKlienta
FROM Klienci
WHERE IDKlienta = @KlientID
END

DROP PROCEDURE Procedura_1

DROP PROCEDURE ProceduraKlient


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 17
-------------------------------


INSERT INTO Kontrahenci
(ImięKontrahenta, NazwiskoKontrahenta, Województwo)
VALUES
('Klaudia', 'Dawidowska', 'ZPM'),
('Irena', 'Krause', 'OPO')

INSERT INTO Kontrahenci
(ImięKontrahenta, NazwiskoKontrahenta)
VALUES
('Dawid', 'Grabowski')

INSERT INTO Kontrahenci
(ImięKontrahenta, NazwiskoKontrahenta, Województwo)
SELECT
Nazwa1,
Nazwa2,
Województwo
FROM NowiKontrahenci
WHERE Województwo = 'PKR'

DELETE
FROM Kontrahenci
WHERE Województwo = 'PKR'

SELECT
COUNT(*)
FROM Kontrahenci
WHERE State = 'PKR'

TRUNCATE TABLE Kontrahenci

DELETE
FROM Kontrahenci

UPDATE Kontrahenci
SET NazwiskoKontrahenta = 'Borowski',
Województwo = 'MŁP'
WHERE IDKontrahenta = 1

UPDATE Dostawcy
SET Dostawcy.Województwo =
(SELECT ZmianaDanychDostawców.Województwo
FROM ZmianaDanychDostawców
WHERE Dostawcy.IDDostawcy = ZmianaDanychDostawców.IDDostawcy),
Dostawcy.KodPocztowy =
(SELECT ZmianaDanychDostawców.KodPocztowy
FROM ZmianaDanychDostawców
WHERE Dostawcy.IDDostawcy = ZmianaDanychDostawców.IDDostawcy)
WHERE EXISTS
(SELECT *
FROM ZmianaDanychDostawców
WHERE Dostawcy.IDDostawcy = ZmianaDanychDostawców.IDDostawcy)


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 18
-------------------------------


CREATE TABLE MojaTabela
(Kolumna_1 INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
Kolumna_2 INT NULL
REFERENCES PowiązanaTabela (PierwszaKolumna)
ON DELETE SET NULL,
Kolumna_3 VARCHAR (25) NULL,
Kolumna_4 FLOAT NULL DEFAULT (10) )

ALTER TABLE MojaTabela
DROP COLUMN Kolumna_3

CREATE INDEX Indeks2
ON MojaTabela (Kolumna_4)

DROP INDEX Indeks2
ON MojaTabela

DROP TABLE MojaTabela

DROP TABLE KalendarzFiskalny

CREATE TABLE KalendarzFiskalny
(IDKalendarza INT NULL,
DataKalendarzowa DATE NULL,
KwartałFiskalny VARCHAR(2) NULL,
RokFiskalny VARCHAR(4) NULL)

INSERT INTO KalendarzFiskalny (IDKalendarza)
SELECT TOP 365
ROW_NUMBER() OVER (ORDER BY IDPomocniczy)
FROM TabelaPomocnicza

UPDATE KalendarzFiskalny
SET DataKalendarzowa = DATEADD(DAY, IDKalendarza-1,'2022-02-01')

UPDATE KalendarzFiskalny
SET KwartałFiskalny = 'Q1',
RokFiskalny = '2022'
WHERE DataKalendarzowa BETWEEN '2022-02-01' AND '2022-04-30'


-------------------------------
INSTRUKCJE SQL DLA ROZDZIAŁU 20
-------------------------------


SELECT * FROM
(SELECT DataSprzedaży, Województwo, KanałSprzedaży, KwotaSprzedaży FROM ZestawienieSprzedaży) AS GłównaInstrukcja
PIVOT (SUM(KwotaSprzedaży) FOR KanałSprzedaży IN ([Internet], [PunktSprzedażyDetalicznej])) AS TabelaPrzestawna
ORDER BY DataSprzedaży